package br.com.main.client.system.botoes;

import java.util.ArrayList;
import java.util.Date;

import br.com.main.client.system.botoes.NotificacoesPresenter.Display;

import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.VerticalPanel;

public class NotificacoesView extends Composite implements Display {
	
	HorizontalPanel panel;
	CellTable<Notificacao> tabelaNot = new CellTable<Notificacao>();
	CellTable<Denuncia>tabelaDenuncia = new CellTable<Denuncia>();
	ArrayList<Notificacao> notificacoes = new ArrayList<Notificacao>();
	ArrayList<Denuncia>denuncias = new ArrayList<Denuncia>();
	ListBox listaMor = new ListBox();
	ArrayList<Morador>moradores = new ArrayList<Morador>();
	TextArea tbDesc = new TextArea();
	Button btEnviar = new Button("Enviar");

	public NotificacoesView () {
		init();
		initWidget(panel);
	}
	
	public void init() {
		panel = new HorizontalPanel();
		panel.setSpacing(10);
		tbDesc.setVisibleLines(5);
		tbDesc.setWidth("250px");
		tbDesc.addStyleName("textAreaDesc");
		listaMor.addStyleName("listBox");
		
		VerticalPanel panelInfs = new VerticalPanel();
		panelInfs.setBorderWidth(1);
		panelInfs.setSpacing(20);
		
		VerticalPanel panelNot = new VerticalPanel();
		panelNot.setBorderWidth(1);
		panelNot.add(new Label("Notificações"));
		
		criarTabelaNot();
		criarTabelaDenuncia();
		
		panelNot.add(tabelaNot);
		
		VerticalPanel panelDen = new VerticalPanel();
		panelDen.setBorderWidth(1);
		
		panelDen.add(new Label("Reclamações"));
		panelDen.add(tabelaDenuncia);
		
		panelInfs.add(panelNot);
		panelInfs.add(panelDen);
		
		VerticalPanel panelFazNot = new VerticalPanel();
		panelFazNot.setBorderWidth(1);
		
		panelFazNot.add(new Label("Notificar algum morador"));
		panelFazNot.add(new Label("Moradores"));
		panelFazNot.add(listaMor);
		panelFazNot.add(new Label("Descrição"));
		panelFazNot.add(tbDesc);
		panelFazNot.add(btEnviar);
		
		panel.add(panelNot);
		panel.add(panelFazNot);
	}
	
	public void criarTabelaDenuncia() {
		
		TextColumn<Denuncia>colNomeDenunciante = new TextColumn<Denuncia>() {
			
			@Override
			public String getValue(Denuncia arg0) {
				return arg0.getNomeDenunciante()+"/"+arg0.getNumDenunciante();
			}
		};
		
		tabelaDenuncia.addColumn(colNomeDenunciante,"Nome Denunciante/Apto");
		
		TextColumn<Denuncia>colNomeDenunciado = new TextColumn<Denuncia>() {

			@Override
			public String getValue(Denuncia arg0) {
				return arg0.getNomeDenunciado()+"/"+arg0.getNumDenunciado();
			}
		};
		
		tabelaDenuncia.addColumn(colNomeDenunciado,"Nome Denunciado/Apto");
		
		TextColumn<Denuncia>colDesc = new TextColumn<Denuncia>() {
			
			@Override
			public String getValue(Denuncia arg0) {
				return arg0.getDescDenuncia();
			}
		};
		
		tabelaDenuncia.addColumn(colDesc,"Descrição");
		
		TextColumn<Denuncia>colData = new TextColumn<Denuncia>() {
			
			@Override
			public String getValue(Denuncia arg0) {
				DateTimeFormat format = DateTimeFormat.getFormat("d/MM/y");
				String data = format.format(new Date(arg0.getDataDesc()));
				return data;
			}
		};
		
		tabelaDenuncia.addColumn(colData,"Data");
	}
	
	public void criarTabelaNot() {
		
		TextColumn<Notificacao>colCpf = new TextColumn<Notificacao>() {
			
			@Override
			public String getValue(Notificacao arg0) {
				
				return arg0.getCpfNot();
			}
		};
		
		this.tabelaNot.addColumn(colCpf, "Cpf Notificante");
		
		TextColumn<Notificacao>colNome = new TextColumn<Notificacao>() {

			@Override
			public String getValue(Notificacao arg0) {
				
				return arg0.getNomeNot();
			}
		};
		
		this.tabelaNot.addColumn(colNome, "Nome notificante");
		
		TextColumn<Notificacao>colDesc = new TextColumn<Notificacao>() {
			
			@Override
			public String getValue(Notificacao arg0) {
				
				return arg0.getDesc();
			}
		};
		
		this.tabelaNot.addColumn(colDesc, "Descricao");
		
		TextColumn<Notificacao>colData = new TextColumn<Notificacao>() {
			
			@Override
			public String getValue(Notificacao arg0) {
				
				DateTimeFormat format = DateTimeFormat.getFormat("d/MM/y");
				String data = format.format(new Date(arg0.getDataNot()));
				return data;
			}
		};
		
		this.tabelaNot.addColumn(colData, "Data");
	}
	
	@Override
	public void atualizaTabelaNot() {
		tabelaNot.setRowCount(this.notificacoes.size());
		tabelaNot.setRowData(0, notificacoes);
	}
	
	@Override
	public void setNotificacao(ArrayList<Notificacao>nots) {
		this.notificacoes = nots;
	}
	
	@Override
	public void atualizaTabelaDen() {
		tabelaDenuncia.setRowCount(denuncias.size());
		tabelaDenuncia.setRowData(0, denuncias);
	}
	
	@Override
	public void setDenuncias(ArrayList<Denuncia>denuncias) {
		this.denuncias = denuncias;
	}
	@Override
	public void atualizaLista() {
		for (int i = 0; i < this.moradores.size(); i++) {
			listaMor.addItem(this.moradores.get(i).getNome());
		}
	}
	@Override
	public void setMoradores(ArrayList<Morador> moradores) {
		this.moradores = moradores;
	}
	@Override
	public TextArea getTbDesc() {
		return tbDesc;
	}
	@Override
	public Button getBtEnviar() {
		return btEnviar;
	}
	@Override
	public ListBox getListaMor() {
		return listaMor;
	}
	@Override
	public ArrayList<Morador> getMoradores() {
		return moradores;
	}
	
}
